home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 2
/
AACD 2.iso
/
AACD
/
Magazine
/
GraphicsCards
/
StormMesa
/
src-glu
/
mipmap.s
< prev
next >
Wrap
Text File
|
1998-12-15
|
31KB
|
1,993 lines
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src-glu/mipmap.c
mc68030
mc68881
XREF _glTexImage2D
XREF _glTexImage1D
XREF _glGetIntegerv
XREF _malloc
XREF _free
XREF _std__in
XREF _std__out
XREF _std__err
SECTION "_gluScaleImage:0",CODE
; glGetIntegerv( GL_UNPACK_SKIP_PIXELS,
XDEF _gluScaleImage
_gluScaleImage
L419 EQU -$12C
link a5,#L419
movem.l d2-d7/a2-a4,-(a7)
fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
movem.l $8(a5),d0/d5
movem.l $14(a5),d7/a3
L235
; switch (format)
sub.l #$1900,d0
cmp.l #$A,d0
bhi.b L240
move.l L420(pc,d0.l*4),a0
jmp (a0)
L420
dc.l L236
dc.l L236
dc.l L236
dc.l L236
dc.l L236
dc.l L236
dc.l L236
dc.l L238
dc.l L239
dc.l L236
dc.l L237
;
L236
; components = 1;
moveq #1,d4
;
bra.b L241
L237
; components = 2;
moveq #2,d4
;
bra.b L241
L238
; components = 3;
moveq #3,d4
;
bra.b L241
L239
; components = 4;
moveq #4,d4
;
bra.b L241
L240
move.l #$18A24,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L241
; return
; switch (typein)
move.l d7,d0
cmp.l #$1404,d0
beq.b L247
bgt.b L421
cmp.l #$1402,d0
beq.b L245
bgt.b L422
cmp.l #$1400,d0
beq.b L243
cmp.l #$1401,d0
beq.b L242
bra.b L249
L422
bgt.b L244
L421
cmp.l #$1406,d0
beq.b L248
bgt.b L423
blt.b L246
L423
cmp.l #$1A00,d0
beq.b L249
bra.b L249
;
L242
; case GL_UNSIGNED_BYTE: sizein = s
moveq #1,d2
;
bra.b L250
L243
; case GL_BYTE: sizein = sizeof(GLbyte);
moveq #1,d2
;
bra.b L250
L244
; case GL_UNSIGNED_SHORT: sizein =
moveq #2,d2
;
bra.b L250
L245
; case GL_SHORT: sizein = sizeof(GLshort);
moveq #2,d2
;
bra.b L250
L246
; case GL_UNSIGNED_INT: sizein = siz
moveq #4,d2
;
bra.b L250
L247
; case GL_INT: sizein = sizeof(GLint);
moveq #4,d2
;
bra.b L250
L248
; case GL_FLOAT: sizein = sizeof(GLfloat);
moveq #4,d2
;
bra.b L250
L249
move.l #$500,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L250
; return
; switch (typeout)
move.l $24(a5),d0
cmp.l #$1404,d0
beq L256
bgt.b L424
cmp.l #$1402,d0
beq.b L254
bgt.b L425
cmp.l #$1400,d0
beq.b L252
cmp.l #$1401,d0
beq.b L251
bra L258
L425
bgt.b L253
L424
cmp.l #$1406,d0
beq.b L257
bgt.b L426
blt.b L255
L426
cmp.l #$1A00,d0
beq L258
bra.b L258
;
L251
; case GL_UNSIGNED_BYTE: sizeout =
move.l #1,-$48(a5)
;
bra L259
L252
; case GL_BYTE: sizeout = sizeof(GLbyte);
move.l #1,-$48(a5)
;
bra.b L259
L253
; case GL_UNSIGNED_SHORT: sizeout
move.l #2,-$48(a5)
;
bra.b L259
L254
; case GL_SHORT: sizeout = sizeof(GLshort)
move.l #2,-$48(a5)
;
bra.b L259
L255
; case GL_UNSIGNED_INT: sizeout = si
move.l #4,-$48(a5)
;
bra.b L259
L256
; case GL_INT: sizeout = sizeof(GLint);
move.l #4,-$48(a5)
;
bra.b L259
L257
; case GL_FLOAT: sizeout = sizeof(GLfloat)
move.l #4,-$48(a5)
;
bra.b L259
L258
move.l #$500,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L259
; return
; glGetIntegerv( GL_UNPACK_ROW_LENGTH, &unpackrowlength );
pea -$24(a5)
pea $CF2.w
jsr _glGetIntegerv
addq.w #$8,a7
; glGetIntegerv( GL_UNPACK_ALIGNMENT, &unpackalignment );
pea -$28(a5)
pea $CF5.w
jsr _glGetIntegerv
addq.w #$8,a7
; glGetIntegerv( GL_UNPACK_SKIP_ROWS, &unpackskiprows );
pea -$2C(a5)
pea $CF3.w
jsr _glGetIntegerv
addq.w #$8,a7
; glGetIntegerv( GL_UNPACK_SKIP_PIXELS, &unpackskippixels );
pea -$30(a5)
pea $CF4.w
jsr _glGetIntegerv
addq.w #$8,a7
; glGetIntegerv( GL_PACK_ROW_LENGTH, &packrowlength );
pea -$34(a5)
pea $D02.w
jsr _glGetIntegerv
addq.w #$8,a7
; glGetIntegerv( GL_PACK_ALIGNMENT, &packalignment );
pea -$38(a5)
pea $D05.w
jsr _glGetIntegerv
addq.w #$8,a7
; glGetIntegerv( GL_PACK_SKIP_ROWS, &packskiprows );
pea -$3C(a5)
pea $D03.w
jsr _glGetIntegerv
addq.w #$8,a7
; glGetIntegerv( GL_PACK_SKIP_PIXELS, &packskippixels );
pea -$40(a5)
pea $D04.w
jsr _glGetIntegerv
addq.w #$8,a7
; tempin = (GLfloat *) malloc( widthin * heightin
move.l d5,d0
muls.l $10(a5),d0
muls.l d4,d0
moveq #2,d1
asl.l d1,d0
move.l d0,-(a7)
jsr _malloc
addq.w #4,a7
move.l d0,a2
; if (!tempin)
cmp.w #0,a2
bne.b L261
L260
move.l #$18A26,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L261
; tempout = (GLfloat *) malloc( widthout * heightout
move.l $1C(a5),d0
muls.l $20(a5),d0
muls.l d4,d0
moveq #2,d1
asl.l d1,d0
move.l d0,-(a7)
jsr _malloc
addq.w #4,a7
move.l d0,-$18(a5)
; if (!tempout)
tst.l -$18(a5)
bne.b L263
L262
; free( tempin );
move.l a2,-(a7)
jsr _free
addq.w #4,a7
move.l #$18A26,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L263
; if (unpackrowlength>0)
move.l -$24(a5),d0
cmp.l #0,d0
ble.b L265
L264
; rowlen = unpackrowlength;
move.l -$24(a5),d1
bra.b L266
L265
; rowlen = widthin;
move.l d5,d1
L266
; if (sizein >= unpackalignment)
cmp.l -$28(a5),d2
blt.b L268
L267
; rowstride = components * rowlen;
move.l d4,d0
muls.l d1,d0
bra L272
L268
; rowstride = unpackalignment/sizein
move.l -$28(a5),d0
divsl.l d2,d0
move.l d4,d3
muls.l d1,d3
muls.l d2,d3
divsl.l -$28(a5),d6:d3
tst.l d6
bne.b L270
L269
muls.l d4,d1
muls.l d2,d1
divsl.l -$28(a5),d1
bra.b L271
L270
muls.l d4,d1
muls.l d2,d1
divsl.l -$28(a5),d1
addq.l #1,d1
L271
muls.l d1,d0
L272
; switch (typein)
move.l d7,d1
sub.l #$1400,d1
cmp.l #6,d1
bhi L322
move.l L427(pc,d1.l*4),a0
jmp (a0)
L427
dc.l L280
dc.l L273
dc.l L294
dc.l L287
dc.l L308
dc.l L301
dc.l L315
;
L273
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L278
L274
; GLubyte *ubptr = (GLubyte *) datain
move.l -$8(a5),d1
muls.l d0,d1
lea 0(a3,d1.l),a0
move.l -$2C(a5),d1
muls.l d0,d1
add.l d1,a0
move.l -$30(a5),d1
muls.l d4,d1
add.l d1,a0
; for (j=0;
clr.l -$C(a5)
bra.b L276
L275
; tempin[k++] = (GLfloat) *ubptr++;
moveq #0,d1
move.b (a0)+,d1
fmove.l d1,fp0
move.l d2,d1
addq.l #1,d2
fmove.s fp0,0(a2,d1.l*4)
addq.l #1,-$C(a5)
L276
move.l d5,d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L275
L277
addq.l #1,-$8(a5)
L278
move.l -$8(a5),d1
cmp.l $10(a5),d1
blt.b L274
L279
;
bra L323
L280
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L285
L281
; GLbyte *bptr = (GLbyte *) datain
move.l -$8(a5),d1
muls.l d0,d1
lea 0(a3,d1.l),a0
move.l -$2C(a5),d1
muls.l d0,d1
add.l d1,a0
move.l -$30(a5),d1
muls.l d4,d1
add.l d1,a0
; for (j=0;
clr.l -$C(a5)
bra.b L283
L282
; tempin[k++] = (GLfloat) *bptr++;
move.b (a0)+,d1
extb.l d1
fmove.l d1,fp0
move.l d2,d1
addq.l #1,d2
fmove.s fp0,0(a2,d1.l*4)
addq.l #1,-$C(a5)
L283
move.l d5,d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L282
L284
addq.l #1,-$8(a5)
L285
move.l -$8(a5),d1
cmp.l $10(a5),d1
blt.b L281
L286
;
bra L323
L287
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L292
L288
; GLushort *usptr = (GLushort *) datain
move.l -$8(a5),d1
muls.l d0,d1
lea 0(a3,d1.l*2),a0
move.l -$2C(a5),d1
muls.l d0,d1
lea 0(a0,d1.l*2),a0
move.l -$30(a5),d1
muls.l d4,d1
lea 0(a0,d1.l*2),a0
; for (j=0;
clr.l -$C(a5)
bra.b L290
L289
; tempin[k++] = (GLfloat) *usptr++;
moveq #0,d1
move.w (a0)+,d1
fmove.l d1,fp0
move.l d2,d1
addq.l #1,d2
fmove.s fp0,0(a2,d1.l*4)
addq.l #1,-$C(a5)
L290
move.l d5,d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L289
L291
addq.l #1,-$8(a5)
L292
move.l -$8(a5),d1
cmp.l $10(a5),d1
blt.b L288
L293
;
bra L323
L294
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L299
L295
; GLshort *sptr = (GLshort *) datain
move.l -$8(a5),d1
muls.l d0,d1
lea 0(a3,d1.l*2),a0
move.l -$2C(a5),d1
muls.l d0,d1
lea 0(a0,d1.l*2),a0
move.l -$30(a5),d1
muls.l d4,d1
lea 0(a0,d1.l*2),a0
; for (j=0;
clr.l -$C(a5)
bra.b L297
L296
; tempin[k++] = (GLfloat) *sptr++;
move.w (a0)+,d1
ext.l d1
fmove.l d1,fp0
move.l d2,d1
addq.l #1,d2
fmove.s fp0,0(a2,d1.l*4)
addq.l #1,-$C(a5)
L297
move.l d5,d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L296
L298
addq.l #1,-$8(a5)
L299
move.l -$8(a5),d1
cmp.l $10(a5),d1
blt.b L295
L300
;
bra L323
L301
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L306
L302
; GLuint *uiptr = (GLuint *) datain
move.l -$8(a5),d1
muls.l d0,d1
lea 0(a3,d1.l*4),a0
move.l -$2C(a5),d1
muls.l d0,d1
lea 0(a0,d1.l*4),a0
move.l -$30(a5),d1
muls.l d4,d1
lea 0(a0,d1.l*4),a0
; for (j=0;
clr.l -$C(a5)
bra.b L304
L303
; tempin[k++] = (GLfloat) *uiptr++;
fmove.l (a0)+,fp0
move.l d2,d1
addq.l #1,d2
fmove.s fp0,0(a2,d1.l*4)
addq.l #1,-$C(a5)
L304
move.l d5,d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L303
L305
addq.l #1,-$8(a5)
L306
move.l -$8(a5),d1
cmp.l $10(a5),d1
blt.b L302
L307
;
bra L323
L308
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L313
L309
; GLint *iptr = (GLint *) datain
move.l -$8(a5),d1
muls.l d0,d1
lea 0(a3,d1.l*4),a0
move.l -$2C(a5),d1
muls.l d0,d1
lea 0(a0,d1.l*4),a0
move.l -$30(a5),d1
muls.l d4,d1
lea 0(a0,d1.l*4),a0
; for (j=0;
clr.l -$C(a5)
bra.b L311
L310
; tempin[k++] = (GLfloat) *iptr++;
fmove.l (a0)+,fp0
move.l d2,d1
addq.l #1,d2
fmove.s fp0,0(a2,d1.l*4)
addq.l #1,-$C(a5)
L311
move.l d5,d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L310
L312
addq.l #1,-$8(a5)
L313
move.l -$8(a5),d1
cmp.l $10(a5),d1
blt.b L309
L314
;
bra L323
L315
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L320
L316
; GLfloat *fptr = (GLfloat *) datain
move.l -$8(a5),d1
muls.l d0,d1
lea 0(a3,d1.l*4),a0
move.l -$2C(a5),d1
muls.l d0,d1
lea 0(a0,d1.l*4),a0
move.l -$30(a5),d1
muls.l d4,d1
lea 0(a0,d1.l*4),a0
; for (j=0;
clr.l -$C(a5)
bra.b L318
L317
; tempin[k++] = *fptr++;
move.l d2,d1
addq.l #1,d2
move.l (a0)+,0(a2,d1.l*4)
addq.l #1,-$C(a5)
L318
move.l d5,d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L317
L319
addq.l #1,-$8(a5)
L320
move.l -$8(a5),d1
cmp.l $10(a5),d1
blt.b L316
L321
;
bra L323
L322
move.l #$18A24,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L323
; return
; sx = (GLfloat) (widthin-1) / (GLfloat) (widthout-1);
move.l d5,d0
subq.l #1,d0
fmove.l d0,fp5
move.l $1C(a5),d0
subq.l #1,d0
fmove.l d0,fp0
fdiv.x fp0,fp5
; sy = (GLfloat) (heightin-1) / (GLfloat) (heightout-1);
move.l $10(a5),d0
subq.l #1,d0
fmove.l d0,fp0
fmove.s fp0,fp7
move.l $20(a5),d0
subq.l #1,d0
fmove.l d0,fp0
fmove.x fp7,fp1
fdiv.x fp0,fp1
fmove.s fp1,fp7
; if (sx<1.0 && sy<1.0)
fmove.x fp5,fp0
fcmp.d #$.3FF00000.00000000,fp0
fboge.b L339
L324
fmove.x fp7,fp0
fcmp.d #$.3FF00000.00000000,fp0
fboge.b L339
L325
; for (i=0;
clr.l -$8(a5)
bra L337
L326
; i0 = i * sy;
fmove.l -$8(a5),fp0
fmul.x fp7,fp0
fmove.l fp0,d0
move.l d0,d7
; i1 = i0 + 1;
move.l d7,d3
addq.l #1,d3
; if (i1 >= heightin)
cmp.l $10(a5),d3
blt.b L328
L327
; if (i1 >= heightin) i1 = heightin-1;
move.l $10(a5),d3
subq.l #1,d3
L328
; alpha = i*sy - i0;
fmove.l -$8(a5),fp3
fmul.x fp7,fp3
fmove.l d7,fp0
fsub.x fp0,fp3
; for (j=0;
clr.l -$C(a5)
bra L335
L329
; j0 = j * sx;
fmove.l -$C(a5),fp0
fmul.x fp5,fp0
fmove.l fp0,d2
; j1 = j0 + 1;
move.l d2,d1
addq.l #1,d1
; if (j1 >= widthin)
cmp.l d5,d1
blt.b L331
L330
; if (j1 >= widthin) j1 = widthin-1;
move.l d5,d1
subq.l #1,d1
L331
; beta = j*sx - j0;
fmove.l -$C(a5),fp1
fmul.x fp5,fp1
fmove.l d2,fp0
fsub.x fp0,fp1
; src00 = tempin + (i0 * widthin + j0) * components;
move.l d7,d0
muls.l d5,d0
add.l d2,d0
muls.l d4,d0
asl.l #2,d0
add.l a2,d0
move.l d0,-$6C(a5)
; src01 = tempin + (i0 * widthin + j1) * components;
move.l d7,d0
muls.l d5,d0
add.l d1,d0
muls.l d4,d0
asl.l #2,d0
add.l a2,d0
move.l d0,-$70(a5)
; src10 = tempin + (i1 * widthin + j0) * components;
move.l d3,d0
muls.l d5,d0
add.l d2,d0
muls.l d4,d0
asl.l #2,d0
add.l a2,d0
move.l d0,a4
; src11 = tempin + (i1 * widthin + j1) * components;
move.l d3,d0
muls.l d5,d0
add.l d1,d0
muls.l d4,d0
lea 0(a2,d0.l*4),a1
; dst = tempout + (i * widthout + j) * components;
move.l -$8(a5),d0
muls.l $1C(a5),d0
add.l -$C(a5),d0
muls.l d4,d0
move.l -$18(a5),a3
lea 0(a3,d0.l*4),a0
; for (k=0;
moveq #0,d2
bra L333
L332
; s1 = *src00++ * (1.0-beta) + *src01++ * beta;
move.l -$6C(a5),a3
moveq #4,d0
add.l d0,-$6C(a5)
fmove.s (a3),fp0
fmove.x fp1,fp2
fmove.d #$.3FF00000.00000000,fp4
fsub.x fp2,fp4
fmul.x fp4,fp0
move.l -$70(a5),a3
moveq #4,d0
add.l d0,-$70(a5)
fmove.s (a3),fp2
fmul.x fp1,fp2
fadd.x fp2,fp0
fmove.x fp0,fp4
; s2 = *src10++ * (1.0-beta) + *src11++ * beta;
fmove.s (a4)+,fp0
fmove.x fp1,fp2
fmove.d #$.3FF00000.00000000,fp6
fsub.x fp2,fp6
fmul.x fp6,fp0
fmove.s (a1)+,fp2
fmul.x fp1,fp2
fadd.x fp2,fp0
fmove.x fp0,fp2
; *dst++ = s1 * (1.0-alpha) + s2 * alpha;
fmove.x fp4,fp0
fmove.x fp3,fp4
fmove.d #$.3FF00000.00000000,fp6
fsub.x fp4,fp6
fmul.x fp6,fp0
fmul.x fp3,fp2
fadd.x fp2,fp0
fmove.s fp0,(a0)+
addq.l #1,d2
L333
cmp.l d4,d2
blt L332
L334
addq.l #1,-$C(a5)
L335
move.l -$C(a5),d0
cmp.l $1C(a5),d0
blt L329
L336
addq.l #1,-$8(a5)
L337
move.l -$8(a5),d0
cmp.l $20(a5),d0
blt L326
L338
bra L358
L339
; for (i=0;
clr.l -$8(a5)
bra L357
L340
; i0 = i * sy;
fmove.l -$8(a5),fp0
fmul.x fp7,fp0
fmove.l fp0,d0
move.l d0,-$64(a5)
; i1 = i0 + 1;
move.l -$64(a5),d0
addq.l #1,d0
move.l d0,-$68(a5)
; if (i1 >= heightin)
move.l -$68(a5),d0
cmp.l $10(a5),d0
blt.b L342
L341
; if (i1 >= heightin) i1 = heightin-1;
move.l $10(a5),d0
subq.l #1,d0
move.l d0,-$68(a5)
L342
; for (j=0;
clr.l -$C(a5)
bra L355
L343
; j0 = j * sx;
fmove.l -$C(a5),fp0
fmul.x fp5,fp0
fmove.l fp0,d0
move.l d0,-$6C(a5)
; j1 = j0 + 1;
move.l -$6C(a5),d0
addq.l #1,d0
move.l d0,d7
; if (j1 >= widthin)
move.l d7,d0
cmp.l d5,d0
blt.b L345
L344
; if (j1 >= widthin) j1 = widthin-1;
move.l d5,d0
subq.l #1,d0
move.l d0,d7
L345
; dst = tempout + (i * widthout + j) * components;
move.l -$8(a5),d0
muls.l $1C(a5),d0
add.l -$C(a5),d0
muls.l d4,d0
move.l -$18(a5),a0
lea 0(a0,d0.l*4),a1
; for (k=0;
moveq #0,d2
bra L353
L346
; sum = 0.0;
fmove.s #$.00000000,fp0
; for (ii=i0;
move.l -$64(a5),d3
bra L351
L347
; for (jj=j0;
move.l -$6C(a5),d1
bra L349
L348
; sum += *(tempin + (ii * widthin + jj) * components + k)
move.l d3,d0
muls.l d5,d0
add.l d1,d0
muls.l d4,d0
lea 0(a2,d0.l*4),a0
fadd.s 0(a0,d2.l*4),fp0
addq.l #1,d1
L349
cmp.l d7,d1
ble.b L348
L350
addq.l #1,d3
L351
cmp.l -$68(a5),d3
ble.b L347
L352
; sum /= (j1-j0+1) * (i1-i0+1);
move.l d7,d0
sub.l -$6C(a5),d0
addq.l #1,d0
move.l -$68(a5),d1
sub.l -$64(a5),d1
addq.l #1,d1
muls.l d1,d0
fmove.l d0,fp1
fdiv.x fp1,fp0
; *dst++ = sum;
fmove.s fp0,(a1)+
addq.l #1,d2
L353
cmp.l d4,d2
blt.b L346
L354
addq.l #1,-$C(a5)
L355
move.l -$C(a5),d0
cmp.l $1C(a5),d0
blt L343
L356
addq.l #1,-$8(a5)
L357
move.l -$8(a5),d0
cmp.l $20(a5),d0
blt L340
L358
; if (packrowlength>0)
move.l -$34(a5),d0
cmp.l #0,d0
ble L360
L359
; rowlen = packrowlength;
move.l -$34(a5),d1
bra L361
L360
; rowlen = widthout;
move.l $1C(a5),d1
L361
; if (sizeout >= packalignment)
move.l -$48(a5),d0
cmp.l -$38(a5),d0
blt L363
L362
; rowstride = components * rowlen;
move.l d4,d0
muls.l d1,d0
bra L367
L363
; rowstride = packalignment/sizeout
move.l -$38(a5),d0
divsl.l -$48(a5),d0
move.l d4,d2
muls.l d1,d2
muls.l -$48(a5),d2
divsl.l -$38(a5),d3:d2
tst.l d3
bne L365
L364
muls.l d4,d1
muls.l -$48(a5),d1
divsl.l -$38(a5),d1
bra L366
L365
muls.l d4,d1
muls.l -$48(a5),d1
divsl.l -$38(a5),d1
addq.l #1,d1
L366
muls.l d1,d0
L367
; switch (typeout)
move.l $24(a5),d1
sub.l #$1400,d1
cmp.l #6,d1
bhi L417
move.l L428(pc,d1.l*4),a0
jmp (a0)
L428
dc.l L375
dc.l L368
dc.l L389
dc.l L382
dc.l L403
dc.l L396
dc.l L410
;
L368
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L373
L369
; GLubyte *ubptr = (GLubyte *) dataout
move.l -$8(a5),d1
muls.l d0,d1
move.l $28(a5),a1
lea 0(a1,d1.l),a0
move.l -$3C(a5),d1
muls.l d0,d1
add.l d1,a0
move.l -$40(a5),d1
muls.l d4,d1
add.l d1,a0
; for (j=0;
clr.l -$C(a5)
bra L371
L370
; *ubptr++ = (GLubyte) tempout[k++];
move.l d2,d1
addq.l #1,d2
move.l -$18(a5),a3
fmove.s 0(a3,d1.l*4),fp0
fmove.l fp0,d1
move.b d1,(a0)+
addq.l #1,-$C(a5)
L371
move.l $1C(a5),d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L370
L372
addq.l #1,-$8(a5)
L373
move.l -$8(a5),d1
cmp.l $20(a5),d1
blt.b L369
L374
;
bra L418
L375
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L380
L376
; GLbyte *bptr = (GLbyte *) dataout
move.l -$8(a5),d1
muls.l d0,d1
move.l $28(a5),a1
lea 0(a1,d1.l),a0
move.l -$3C(a5),d1
muls.l d0,d1
add.l d1,a0
move.l -$40(a5),d1
muls.l d4,d1
add.l d1,a0
; for (j=0;
clr.l -$C(a5)
bra L378
L377
; *bptr++ = (GLbyte) tempout[k++];
move.l d2,d1
addq.l #1,d2
move.l -$18(a5),a3
fmove.s 0(a3,d1.l*4),fp0
fmove.l fp0,d1
move.b d1,(a0)+
addq.l #1,-$C(a5)
L378
move.l $1C(a5),d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L377
L379
addq.l #1,-$8(a5)
L380
move.l -$8(a5),d1
cmp.l $20(a5),d1
blt.b L376
L381
;
bra L418
L382
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L387
L383
; GLushort *usptr = (GLushort *) dataout
move.l -$8(a5),d1
muls.l d0,d1
move.l $28(a5),a1
lea 0(a1,d1.l*2),a0
move.l -$3C(a5),d1
muls.l d0,d1
lea 0(a0,d1.l*2),a0
move.l -$40(a5),d1
muls.l d4,d1
lea 0(a0,d1.l*2),a0
; for (j=0;
clr.l -$C(a5)
bra L385
L384
; *usptr++ = (GLushort) tempout[k++];
move.l d2,d1
addq.l #1,d2
move.l -$18(a5),a3
fmove.s 0(a3,d1.l*4),fp0
fmove.l fp0,d1
move.w d1,(a0)+
addq.l #1,-$C(a5)
L385
move.l $1C(a5),d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L384
L386
addq.l #1,-$8(a5)
L387
move.l -$8(a5),d1
cmp.l $20(a5),d1
blt.b L383
L388
;
bra L418
L389
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L394
L390
; GLshort *sptr = (GLshort *) dataout
move.l -$8(a5),d1
muls.l d0,d1
move.l $28(a5),a1
lea 0(a1,d1.l*2),a0
move.l -$3C(a5),d1
muls.l d0,d1
lea 0(a0,d1.l*2),a0
move.l -$40(a5),d1
muls.l d4,d1
lea 0(a0,d1.l*2),a0
; for (j=0;
clr.l -$C(a5)
bra L392
L391
; *sptr++ = (GLshort) tempout[k++];
move.l d2,d1
addq.l #1,d2
move.l -$18(a5),a3
fmove.s 0(a3,d1.l*4),fp0
fmove.l fp0,d1
move.w d1,(a0)+
addq.l #1,-$C(a5)
L392
move.l $1C(a5),d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L391
L393
addq.l #1,-$8(a5)
L394
move.l -$8(a5),d1
cmp.l $20(a5),d1
blt.b L390
L395
;
bra L418
L396
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L401
L397
; GLuint *uiptr = (GLuint *) dataout
move.l -$8(a5),d1
muls.l d0,d1
move.l $28(a5),a1
lea 0(a1,d1.l*4),a0
move.l -$3C(a5),d1
muls.l d0,d1
lea 0(a0,d1.l*4),a0
move.l -$40(a5),d1
muls.l d4,d1
lea 0(a0,d1.l*4),a0
; for (j=0;
clr.l -$C(a5)
bra L399
L398
; *uiptr++ = (GLuint) tempout[k++];
move.l d2,d1
addq.l #1,d2
move.l -$18(a5),a3
fmove.s 0(a3,d1.l*4),fp0
fmove.l fp0,d1
move.l d1,(a0)+
addq.l #1,-$C(a5)
L399
move.l $1C(a5),d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L398
L400
addq.l #1,-$8(a5)
L401
move.l -$8(a5),d1
cmp.l $20(a5),d1
blt.b L397
L402
;
bra L418
L403
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L408
L404
; GLint *iptr = (GLint *) dataout
move.l -$8(a5),d1
muls.l d0,d1
move.l $28(a5),a1
lea 0(a1,d1.l*4),a0
move.l -$3C(a5),d1
muls.l d0,d1
lea 0(a0,d1.l*4),a0
move.l -$40(a5),d1
muls.l d4,d1
lea 0(a0,d1.l*4),a0
; for (j=0;
clr.l -$C(a5)
bra L406
L405
; *iptr++ = (GLint) tempout[k++];
move.l d2,d1
addq.l #1,d2
move.l -$18(a5),a3
fmove.s 0(a3,d1.l*4),fp0
fmove.l fp0,d1
move.l d1,(a0)+
addq.l #1,-$C(a5)
L406
move.l $1C(a5),d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L405
L407
addq.l #1,-$8(a5)
L408
move.l -$8(a5),d1
cmp.l $20(a5),d1
blt.b L404
L409
;
bra L418
L410
; k = 0;
moveq #0,d2
; for (i=0;
clr.l -$8(a5)
bra L415
L411
; GLfloat *fptr = (GLfloat *) dataout
move.l -$8(a5),d1
muls.l d0,d1
move.l $28(a5),a1
lea 0(a1,d1.l*4),a0
move.l -$3C(a5),d1
muls.l d0,d1
lea 0(a0,d1.l*4),a0
move.l -$40(a5),d1
muls.l d4,d1
lea 0(a0,d1.l*4),a0
; for (j=0;
clr.l -$C(a5)
bra L413
L412
; *fptr++ = tempout[k++];
move.l d2,d1
addq.l #1,d2
move.l -$18(a5),a3
fmove.s 0(a3,d1.l*4),fp0
fmove.s fp0,(a0)+
addq.l #1,-$C(a5)
L413
move.l $1C(a5),d1
muls.l d4,d1
move.l -$C(a5),d3
cmp.l d1,d3
blt.b L412
L414
addq.l #1,-$8(a5)
L415
move.l -$8(a5),d1
cmp.l $20(a5),d1
blt.b L411
L416
;
bra L418
L417
move.l #$18A24,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L418
; return
; free( tempin );
move.l a2,-(a7)
jsr _free
addq.w #4,a7
; free( tempout );
move.l -$18(a5),-(a7)
jsr _free
addq.w #4,a7
moveq #0,d0
fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
SECTION "_ilog2:0",CODE
rts
;static GLint ilog2( GLint n )
_ilog2
move.l d2,-(a7)
move.l $8(a7),d1
L429
; if (n<=0)
cmp.l #0,d1
bgt.b L431
L430
moveq #0,d0
move.l (a7)+,d2
rts
L431
; for (k=0;
moveq #0,d0
bra.b L433
L432
addq.l #1,d0
L433
moveq #1,d2
asr.l d2,d1
tst.l d1
bne.b L432
L434
move.l (a7)+,d2
rts
SECTION "_round2:0",CODE
;static GLint round2( GLint n )
_round2
movem.l d2-d4,-(a7)
move.l $10(a7),d1
L435
; for (m=1;
moveq #1,d0
bra.b L437
L436
moveq #1,d2
asl.l d2,d0
L437
cmp.l d1,d0
blt.b L436
L438
; if (m-n <= n-m/2)
move.l d0,d3
sub.l d1,d3
move.l d0,d2
divsl.l #2,d2
sub.l d2,d1
cmp.l d1,d3
bgt.b L440
L439
movem.l (a7)+,d2-d4
rts
L440
divsl.l #2,d0
movem.l (a7)+,d2-d4
rts
SECTION "_bytes_per_pixel:0",CODE
;static GLint bytes_per_pixel( GLenum format, GLenum type )
_bytes_per_pixel
movem.l 4(a7),d0/d1
L441
; switch (format)
sub.l #$1900,d0
cmp.l #$A,d0
bhi.b L446
move.l L458(pc,d0.l*4),a0
jmp (a0)
L458
dc.l L442
dc.l L442
dc.l L442
dc.l L442
dc.l L442
dc.l L442
dc.l L442
dc.l L444
dc.l L445
dc.l L442
dc.l L443
;
L442
; n = 1;
moveq #1,d0
;
bra.b L447
L443
; n = 2;
moveq #2,d0
;
bra.b L447
L444
; n = 3;
moveq #3,d0
;
bra.b L447
L445
; n = 4;
moveq #4,d0
;
bra.b L447
L446
; n = 0;
moveq #0,d0
L447
; switch (type)
cmp.l #$1404,d1
beq.b L454
bgt.b L459
cmp.l #$1402,d1
beq.b L452
bgt.b L460
cmp.l #$1400,d1
beq.b L449
cmp.l #$1401,d1
beq.b L448
bra.b L456
L460
bgt.b L451
L459
cmp.l #$1406,d1
beq.b L455
bgt.b L461
blt.b L453
L461
cmp.l #$1A00,d1
beq.b L450
bra.b L456
;
L448
; case GL_UNSIGNED_BYTE: m = sizeof
moveq #1,d1
;
bra.b L457
L449
; case GL_BYTE: m = sizeof(GLbyte);
moveq #1,d1
;
bra.b L457
L450
; case GL_BITMAP: m = 1;
moveq #1,d1
;
bra.b L457
L451
; case GL_UNSIGNED_SHORT: m = size
moveq #2,d1
;
bra.b L457
L452
; case GL_SHORT: m = sizeof(GLshort);
moveq #2,d1
;
bra.b L457
L453
; case GL_UNSIGNED_INT: m = sizeof(G
moveq #4,d1
;
bra.b L457
L454
; case GL_INT: m = sizeof(GLint);
moveq #4,d1
;
bra.b L457
L455
; case GL_FLOAT: m = sizeof(GLfloat);
moveq #4,d1
;
bra.b L457
L456
; default: m = 0;
moveq #0,d1
L457
muls.l d1,d0
rts
SECTION "_gluBuild1DMipmaps:0",CODE
;GLint APIENTRY gluBuild1DMipmaps( GLenum target, GLint components,
XDEF _gluBuild1DMipmaps
_gluBuild1DMipmaps
L491 EQU -$34
link a5,#L491
movem.l d2-d7/a2/a3,-(a7)
movem.l $18(a5),d2/a3
move.l $C(a5),d3
L462
; if (width < 1)
move.l $10(a5),d0
cmp.l #1,d0
bge.b L464
L463
move.l #$18A25,d0
movem.l (a7)+,d2-d7/a2/a3
unlk a5
rts
L464
; glGetIntegerv( GL_MAX_TEXTURE_SIZE, &max_width );
pea -$14(a5)
pea $D33.w
jsr _glGetIntegerv
addq.w #$8,a7
; max_levels = ilog2( max_width ) + 1;
move.l -$14(a5),-(a7)
jsr _ilog2
addq.w #4,a7
addq.l #1,d0
move.l d0,-$C(a5)
; levels = ilog2( width ) + 1;
move.l $10(a5),-(a7)
jsr _ilog2
addq.w #4,a7
addq.l #1,d0
move.l d0,-$8(a5)
; if (levels>max_levels)
move.l -$8(a5),d0
cmp.l -$C(a5),d0
ble.b L466
L465
; levels = max_levels;
move.l -$C(a5),-$8(a5)
L466
; new_width = 1 << (levels-1);
move.l -$8(a5),d0
subq.l #1,d0
moveq #1,d5
asl.l d0,d5
; texture = (GLubyte *) malloc( new_width * components );
move.l d5,d0
muls.l d3,d0
move.l d0,-(a7)
jsr _malloc
addq.w #4,a7
move.l d0,a2
; if (!texture)
cmp.w #0,a2
bne.b L468
L467
move.l #$18A26,d0
movem.l (a7)+,d2-d7/a2/a3
unlk a5
rts
L468
; if (width != new_width)
move.l $10(a5),d0
cmp.l d5,d0
beq.b L478
L469
; switch (type)
cmp.l #$1401,d2
beq.b L470
bra.b L477
;
L470
; GLubyte *ub_data = (GLubyte *) data;
move.l a3,a1
; for (i=0;
moveq #0,d4
bra.b L475
L471
; j = i * width / new_width;
move.l d4,d0
muls.l $10(a5),d0
divsl.l d5,d0
move.l d0,d7
; for (k=0;
moveq #0,d1
bra.b L473
L472
; texture[i*components+k] = ub_data[j*components+k];
move.l d7,d0
muls.l d3,d0
add.l d1,d0
move.b 0(a1,d0.l),d2
move.l d4,d0
muls.l d3,d0
add.l d1,d0
move.b d2,0(a2,d0.l)
addq.l #1,d1
L473
cmp.l d3,d1
blt.b L472
L474
addq.l #1,d4
L475
cmp.l d5,d4
blt.b L471
L476
;
bra.b L478
L477
move.l #$18707,d0
movem.l (a7)+,d2-d7/a2/a3
unlk a5
rts
L478
; for (l=0;
moveq #0,d7
bra L486
L479
; glTexImage1D( GL_TEXTURE_1D, l, components, new_width, 0
move.l a2,-(a7)
pea $1401.w
move.l $14(a5),-(a7)
clr.l -(a7)
move.l d5,-(a7)
move.l d3,-(a7)
move.l d7,-(a7)
pea $DE0.w
jsr _glTexImage1D
add.w #$20,a7
; new_width = new_width / 2;
divsl.l #2,d5
; for (i=0;
moveq #0,d4
bra.b L484
L480
; for (k=0;
moveq #0,d1
bra.b L482
L481
; sample1 = (GLint) texture[i*2*components+k];
move.l d4,d0
moveq #1,d2
asl.l d2,d0
muls.l d3,d0
add.l d1,d0
moveq #0,d2
move.b 0(a2,d0.l),d2
; sample2 = (GLint) texture[(i*2+1)*components+k];
move.l d4,d0
moveq #1,d6
asl.l d6,d0
addq.l #1,d0
muls.l d3,d0
add.l d1,d0
move.b 0(a2,d0.l),d0
and.l #$FF,d0
; texture[i*components+k] = (GLubyte) ((sample1 + sample2) /
add.l d0,d2
divsl.l #2,d2
move.l d4,d0
muls.l d3,d0
add.l d1,d0
move.b d2,0(a2,d0.l)
addq.l #1,d1
L482
cmp.l d3,d1
blt.b L481
L483
addq.l #1,d4
L484
cmp.l d5,d4
blt.b L480
L485
move.l d7,d0
addq.l #1,d0
move.l d0,d7
L486
move.l d7,d0
cmp.l -$8(a5),d0
blt L479
L487
; free( texture );
move.l a2,-(a7)
jsr _free
addq.w #4,a7
; for (l=levels;
move.l -$8(a5),d7
bra.b L489
L488
; glTexImage1D( GL_TEXTURE_1D, l, components, 0, 0,
clr.l -(a7)
pea $1401.w
move.l $14(a5),-(a7)
clr.l -(a7)
clr.l -(a7)
move.l d3,-(a7)
move.l d7,-(a7)
pea $DE0.w
jsr _glTexImage1D
add.w #$20,a7
move.l d7,d0
addq.l #1,d0
move.l d0,d7
L489
move.l d7,d0
cmp.l -$C(a5),d0
blt.b L488
L490
moveq #0,d0
movem.l (a7)+,d2-d7/a2/a3
unlk a5
rts
SECTION "_gluBuild2DMipmaps:0",CODE
;GLint APIENTRY gluBuild2DMipmaps( GLenum target, GLint components,
XDEF _gluBuild2DMipmaps
_gluBuild2DMipmaps
L530 EQU -$28
link a5,#L530
movem.l d2-d7/a2-a4,-(a7)
move.l $14(a5),d4
move.l $10(a5),d5
move.l $1C(a5),d6
move.l $20(a5),a4
L492
; if (width < 1 || height < 1)
cmp.l #1,d5
blt.b L494
L493
cmp.l #1,d4
bge.b L495
L494
move.l #$18A25,d0
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L495
; glGetIntegerv( GL_MAX_TEXTURE_SIZE, &maxsize );
pea -$C(a5)
pea $D33.w
jsr _glGetIntegerv
addq.w #$8,a7
; w = round2( width );
move.l d5,-(a7)
jsr _round2
addq.w #4,a7
move.l d0,d3
; if (w>maxsize)
cmp.l -$C(a5),d3
ble.b L497
L496
; w = maxsize;
move.l -$C(a5),d3
L497
; h = round2( height );
move.l d4,-(a7)
jsr _round2
addq.w #4,a7
move.l d0,d2
; if (h>maxsize)
cmp.l -$C(a5),d2
ble.b L499
L498
; h = maxsize;
move.l -$C(a5),d2
L499
; bpp = bytes_per_pixel( format, type );
move.l d6,-(a7)
move.l $18(a5),-(a7)
jsr _bytes_per_pixel
addq.w #$8,a7
move.l d0,-$24(a5)
; if (bpp==0)
tst.l -$24(a5)
bne.b L501
L500
move.l #$18A24,d0
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L501
; if (w!=width || h!=height)
cmp.l d5,d3
bne.b L503
L502
cmp.l d4,d2
beq.b L508
L503
; image = malloc( (w+4) * h * bpp );
move.l d3,d0
addq.l #4,d0
muls.l d2,d0
muls.l -$24(a5),d0
move.l d0,-(a7)
jsr _malloc
addq.w #4,a7
move.l d0,a2
; if (!image)
cmp.w #0,a2
bne.b L505
L504
move.l #$18A26,d0
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L505
; error = gluScaleImage( format, width, height, type, data
move.l a2,-(a7)
move.l d6,-(a7)
move.l d2,-(a7)
move.l d3,-(a7)
move.l a4,-(a7)
move.l d6,-(a7)
move.l d4,-(a7)
move.l d5,-(a7)
move.l $18(a5),-(a7)
jsr _gluScaleImage
add.w #$24,a7
; if (error)
tst.l d0
beq.b L507
L506
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L507
; return
bra.b L509
L508
; image = (void *) data;
move.l a4,a2
L509
; level = 0;
moveq #0,d7
; while (1)
bra L526
L510
; glTexImage2D( target, level, components, w, h, 0, format
move.l a2,-(a7)
move.l d6,-(a7)
move.l $18(a5),-(a7)
clr.l -(a7)
move.l d2,-(a7)
move.l d3,-(a7)
move.l $C(a5),-(a7)
move.l d7,-(a7)
move.l $8(a5),-(a7)
jsr _glTexImage2D
add.w #$24,a7
; if (w==1 && h==1)
cmp.l #1,d3
bne.b L513
L511
cmp.l #1,d2
bne.b L513
L512
; if (w==1 && h==1)
bra L527
L513
; neww = (w<2) ? 1 : w/2;
cmp.l #2,d3
bge.b L515
L514
moveq #1,d5
bra.b L516
L515
move.l d3,d5
divsl.l #2,d5
L516
; newh = (h<2) ? 1 : h/2;
cmp.l #2,d2
bge.b L518
L517
moveq #1,d4
bra.b L519
L518
move.l d2,d4
divsl.l #2,d4
L519
; newimage = malloc( (neww+4) * newh * bpp );
move.l d5,d0
addq.l #4,d0
muls.l d4,d0
muls.l -$24(a5),d0
move.l d0,-(a7)
jsr _malloc
addq.w #4,a7
move.l d0,a3
; if (!newimage)
cmp.w #0,a3
bne.b L521
L520
move.l #$18A26,d0
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L521
; error = gluScaleImage( format, w, h, type, image,
move.l a3,-(a7)
move.l d6,-(a7)
move.l d4,-(a7)
move.l d5,-(a7)
move.l a2,-(a7)
move.l d6,-(a7)
move.l d2,-(a7)
move.l d3,-(a7)
move.l $18(a5),-(a7)
jsr _gluScaleImage
add.w #$24,a7
; if (error)
tst.l d0
beq.b L523
L522
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L523
; if (image!=data)
cmp.l a4,a2
beq.b L525
L524
; free( image );
move.l a2,-(a7)
jsr _free
addq.w #4,a7
L525
; image = newimage;
move.l a3,a2
; w = neww;
move.l d5,d3
; h = newh;
move.l d4,d2
; level++;
move.l d7,d0
addq.l #1,d0
move.l d0,d7
L526
bra L510
L527
; if (image!=data)
cmp.l a4,a2
beq.b L529
L528
; free( image );
move.l a2,-(a7)
jsr _free
addq.w #4,a7
L529
moveq #0,d0
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
END